home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / prog / atari / m2 / cat3src / magic / d / mttext.d < prev    next >
Text File  |  1997-10-26  |  6KB  |  150 lines

  1. (*----------------------------------------------------------------------*
  2.  *                                                                      *
  3.  *  MAGICTOOLS   Modula's  All purpose  GEM  Interface  Cadre  Toolbox  *
  4.  *               ÿ         ÿ            ÿ    ÿ          ÿ               *
  5.  *----------------------------------------------------------------------*
  6.  * Version 3.30  02.02.1992     (C)90/91/92 by Peter Hellinger Software *
  7.  *----------------------------------------------------------------------*
  8.  *            Dieses Modul ist urheberrechtlich geschtzt.              *
  9.  *                                                                      *
  10.  * Die Ver”ffentlichung des Quelltextes oder Teilen daraus, sowie die   *
  11.  * Verbreitung des bersetzten, nicht gelinkten Codes in schriftlicher, *
  12.  * oder maschinenlesbarer Form, insbesondere in Zeitschriften, Mail-    *
  13.  * boxen oder anderen Medien bedarf der ausdrcklichen schriftlichen    *
  14.  * Einverst„ndnisserkl„rung des Autors.                                 *
  15.  *                                                                      *
  16.  * Die Verbreitung des Moduls als Teil eines gelinkten Programms ist    *
  17.  * fr Lizenznehmer ausdrcklich erlaubt!  Der Autor beh„lt sich das    *
  18.  * Recht vor, diese Erlaubnis jederzeit und ohne Angaben von Grnden zu *
  19.  * widerrufen.                                                          *
  20.  *----------------------------------------------------------------------*)
  21.  
  22. (*----------------------------------------------------------------------*
  23.  * mtText       Text als verkettete Liste.                              *
  24.  *                                                                      *
  25.  * Die einzelnen Zeilen des Textes werden dynamisch alloziert. Ein      *
  26.  * String mit 35 Zeichen belegt damit auch nur 36 Byte (35 + 1 Null-    *
  27.  * char)!  Die Strings sind IMMER Null-Terminiert! Strings mit L„nge    *
  28.  * unter 8 Byte werden in einem statischen String gespeichert. Das ver- *
  29.  * ursacht aber keinen weiteren Speicherverbrauch (RECORD-Variante)!    *
  30.  *                                                                      *
  31.  * WICHTIG: Gr”žte L„nge einer Zeilen ist im Augenblick 2048 Zeichen!   *
  32.  *----------------------------------------------------------------------*)
  33.  
  34. DEFINITION MODULE mtText;
  35.  
  36. FROM MagicSys   IMPORT  Nil, Null, Bit0, Bit1, Bit2, Bit3, Bit4, Bit5, Bit6,
  37.                         Bit7, Bit8, Bit9, Bit10, Bit11, Bit12, Bit13, Bit14,
  38.                         Bit15, LOC, Byte, ByteSet, sWORD, sINTEGER, sCARDINAL,
  39.                         sBITSET, lINTEGER, lCARDINAL, lWORD, lBITSET;
  40.  
  41.  
  42.  
  43.  
  44.  
  45. CONST   MaxLength = 2048;   (* 2 kB max. L„nge eines Strings *)
  46.  
  47. TYPE    PtrString = POINTER TO ARRAY [0..MaxLength - 1] OF CHAR;
  48.  
  49. TYPE    LINE; (* Linientype *)
  50.  
  51. TYPE    TEXT; (* Texttyp *)
  52.  
  53. PROCEDURE NewTEXT (VAR text: TEXT): BOOLEAN;
  54. (* Legt einen neuen TEXT an *)
  55.  
  56. PROCEDURE DisposeTEXT (VAR text: TEXT);
  57. (* L”scht einen TEXT *)
  58.  
  59. (* Prozeduren mit Wirkung auf LINEs *)
  60.  
  61. PROCEDURE NewLine (VAR line: LINE; REF  string: ARRAY OF CHAR): BOOLEAN;
  62. (* Es wird eine LINE erzeugt und der Inhalt von 'string' kopiert.
  63.  * Achtung, die Zeile hat noch keinen Bezug zum einem TEXT! *)
  64.  
  65. PROCEDURE InsertLine (VAR text: TEXT; line, after: LINE);
  66. (* Die Zeile wird nach 'after' eingefgt. Ist 'after' NIL, wird die 
  67.  * Zeile zur ersten Zeile des Textes. Beispiel:
  68.  *
  69.  * IF NewLine (line, 'Det is eene Zeile, wa?') THEN
  70.  *  InsertLine (text, line, LastLine (text));
  71.  * END;
  72.  *)
  73.  
  74. PROCEDURE PutLine (line: LINE; REF  string: ARRAY OF CHAR): BOOLEAN;
  75. (* Der Zeile 'line' wird 'string' zugewiesen.
  76.  * FALSE wenn fr den 'string' nicht gengend Speicher zur Verfgung
  77.  * steht. Der alte Inhalt von 'line' bleibt dann erhalten.
  78.  *)
  79.  
  80. PROCEDURE GetLine (line: LINE; VAR string: ARRAY OF CHAR);
  81. (* 'string' wird der Inhalt von 'line' zugewiesen *)
  82.  
  83. PROCEDURE GetLinePtr (line: LINE): PtrString;
  84. (* Liefert einen Zeiger auf den String aus 'line' *)
  85.  
  86. PROCEDURE LengthLine (line: LINE): sCARDINAL;
  87. (* Liefert die L„nge einer Zeile *)
  88.  
  89. PROCEDURE DisposeLine (VAR line: LINE);
  90. (* L”scht eine Zeile *)
  91.  
  92. PROCEDURE FirstLine (text: TEXT): LINE;
  93. (* Liefert die erste Zeile eines Textes *)
  94.  
  95. PROCEDURE LastLine (text: TEXT): LINE;
  96. (* Liefert die letzte Zeile eines Textes *)
  97.  
  98. PROCEDURE NextLine (line: LINE): LINE;
  99. (* Liefert die auf 'line' folgende Zeile *)
  100.  
  101. PROCEDURE PrevLine (line: LINE): LINE;
  102. (* Liefert die 'line' vorhergehende Zeile *)
  103.  
  104. PROCEDURE NilLine (): LINE;
  105. (* Liefert ein leere (NIL) Zeile *)
  106.  
  107. (* Prozeduren mit Wirkung auf den ganzen Text *)
  108.  
  109. PROCEDURE GetNumber (text: TEXT): lCARDINAL;
  110. (* Liefert die Anzahl der Zeilen im Text *)
  111.  
  112. PROCEDURE FindNumber (text: TEXT; num: lCARDINAL): LINE;
  113. (* Liefert Zeile 'num' aus dem Text *)
  114.  
  115. TYPE SearchDir = (up, down);
  116.  
  117. PROCEDURE FindPos (text: TEXT; REF  search: ARRAY OF CHAR; start: LINE;
  118.                    dir: SearchDir; VAR pos: sCARDINAL): LINE;
  119. (* Liefert eine Zeile, in der der String 'search' steht. 'start' ist die 
  120.  * Startzeile, 'dir' ist die Richtung in der gesucht wird. 'pos' enth„lt 
  121.  * die Position des Suchstrings in der Zeile.
  122.  *)
  123.  
  124. PROCEDURE InsertText (VAR text, insert: TEXT; after: LINE);
  125. (* Der Text 'insert' wird nach 'after' eingefgt.  Ist 'after' NIL,
  126.  * wird 'insert' am Anfang von 'text' eingefgt.
  127.  * 'insert' ist nacher LEER!!!
  128.  *)
  129.  
  130. PROCEDURE ReadText (VAR text: TEXT; REF  file: ARRAY OF CHAR): sINTEGER;
  131. (* Liest einen Text von Diskette und legt ihn als verkettete Liste im
  132.  * Speicher an. Liefert einen Fehlercode: Fr Dateifehler die blichen
  133.  * GEMDOS-Fehlercodes (siehe MagicDOS) sowie fr einen Speicherfehler
  134.  * (zuwenig Speicher) MagicDOS.ENSMem (-39)
  135.  *)
  136.  
  137. PROCEDURE WriteText (text: TEXT; REF  file: ARRAY OF CHAR): sINTEGER;
  138. (* Schreibt einen als Liste organisierten Text in eine Datei. Liefert die
  139.  * blichen GEMDOS-Fehlercodes. Am Ende jeder Zeile wird der EndOfLine-
  140.  * String in die Datei geschrieben.
  141.  *)
  142.  
  143. PROCEDURE SetEndOfLine (text: TEXT; REF  string: ARRAY OF CHAR);
  144. (* Setzt den String, der am Ende jeder Zeile geschrieben wird.
  145.  * Defaultm„ssig ist hier CR/LF eingestellt.
  146.  *)
  147.  
  148. END mtText.
  149.  
  150.